<?php

if (!function_exists('push_system_msg')) {
	/**
	 * 给用户发送系统消息
	 * @author	Baiyu
	 * @param	number	$uid		用户ID
	 * @param	string	$message	推送的数据
	 * @param	string	$event		消息事件,APP收到后会触发相应的事件 msg为系统消息
	 * @return	boolean
	 */
	function push_system_msg($uid, $message = '', $event = 'msg'){
		$data = array(
			'type' => 'notify',
			'event' => 'system_'.$event,
			'data' => array(
				'from' => 'system',
				'to' => 'uid:'.$uid,
				'msg' => $message,
			),
		);
		return TRUE;	//TODO 上线时删除此测试代码
		return \Weibo\Lib\MqLib::add(json_encode($data), 'notify');
	}
}

if (!function_exists('push_weibo_notify')) {
	/**
	 * 给用户发送微博事件通知
	 * @param	number	$to			目标用户ID
	 * @param	number	$from		发起用户ID
	 * @param	string	$type		微博事件类型
	 * @return	boolean
	 */
	function push_weibo_notify($to, $from, $type){
		$type_str = array('at', 'follow', 'comment', 'praise');
		if (in_array($type, $type_str)) {
			
			if (is_array($to)) {
				foreach ($to as $k => $v){
					$to[$k] = 'uid:'.$v;
				}
				$to = implode(',', $to);
			} else {
				$to = 'uid:'.$to;
			}
			$from = 'uid:'.$from;
			
			$data = array(
				'type' => 'notify',
				'event' => 'weibo_' . $type,
				'data' => array(
					'from' => $from,
					'to' => $to,
				),
			);
			return TRUE;	//TODO 上线时删除此测试代码
			return \Weibo\Lib\MqLib::add(json_encode($data), 'notify');
		} else {
			return FALSE;
		}
	}
}

if (!function_exists('weibo_log')) {
	/**
	 * 记录微博模块的日志
	 * @author	Baiyu
	 * @param string $data
	 * @return boolean
	 */
	function weibo_log($data = ''){
		$log_string = '';
		
		if (is_array($data)) {
			$log_array = array();
			foreach ($data as $key => $value) {
				$log_array[] = $key.':'.$value;
			}
			$log_string = '['.implode(',', $log_array).']';
			
		} elseif(is_string($data)) {
			$log_string = $data;
		}
		
		//TODO 接下来怎么储存
		
		return TRUE;
	}
}

if (!function_exists('INPUT')) {
	/**
	 * 兼容POST数据为JSON字符串的情况,用法同ThinkPHP的I
	 * @author	Baiyu
	 * @param	string		$name 变量的名称 支持指定类型
	 * @param	mixed		$default 不存在的时候默认值
	 * @param	mixed		$filter 参数过滤方法
	 * @return	mixed
	 */
	function INPUT($name, $default = '', $filter = NULL){
		$return = I($name, $default, $filter);
		if (!$return && IS_POST) {
			$post = json_decode(file_get_contents('php://input'), TRUE);
			$_POST = array_merge($_POST, $post);

			$return = I($name, $default, $filter);
		}

		return $return;
	}
}

if (!function_exists('time2str')) {
	/**
	 * 时间戳转为字符串时间
	 * 几分钟前、几小时前、今天几点、昨天几点、完整日期
	 * @author	Baiyu	2017-01-23
	 * @param	number	$timestamp		时间戳
	 * @return	string
	 */
	function time2str($timestamp){
		$timestamp = intval($timestamp);
		$expire = NOW_TIME - $timestamp;
	
		$today = strtotime('today');
		$yestoday = $today - 86400;
	
		//今天
		if ($timestamp > $today) {
			if ($expire < 3600) {
				return ceil($expire / 60) . ' 分钟前';
			} elseif($expire < 43200) {
				return floor($expire / 3600) . ' 小时前';
			} else {
				return '今天 ' . date('H:i', $timestamp);
			}
				
			//昨天
		} elseif ($timestamp < $today && $timestamp > $yestoday) {
			return '昨天' . date('H:i', $timestamp);
				
			//更早
		} else {
			return date('Y-m-d H:i', $timestamp);
		}
	}
}

if (!function_exists('field_as_key')) {
	/**
	 * 二维数组用某个二维元素的值作为一维元素的键
	 * 常用于数据库结果用某个字段作为记录的索引键
	 * @author	Baiyu	2017-01-23
	 * @param	array	$array		输入数组
	 * @param	string	$field		要作为键的字段名
	 * @param	bool	$unique		要做键的字段是否唯一(该字段与记录是否一一对应)
	 * @return	array
	 */
	function field_as_key($array, $field, $unique = FALSE){
		$result = array();
		
		foreach ($array as $item){
			if (isset($item[$field])) {
				if(!$unique && isset($result[$item[$field]])) {
					$unique = TRUE;
					$result[$item[$field]] = array($result[$item[$field]]);
					$result[$item[$field]][] = $item;
				} elseif ($unique) {
					$result[$item[$field]][] = $item;
				} else {
					$result[$item[$field]] = $item;
				}
			}
		}
		return $result;
	}
}

if (!function_exists('translate_field')) {
	/**
	 * 翻译字段名
	 * 不同模块的表中对同一数据可能起不同的字段名，如user_id和uid，所以需要翻译
	 * @author	Baiyu	2017-01-23
	 * @param	string	$module			模块名
	 * @param	mixed	$need_field		需要翻译的内容
	 * @return	mixed
	 */
	function translate_field($module, $need_field){
		static $translate_config = array();
		empty($translate_config) && $translate_config = include MODULE_PATH . 'Conf/imi_translate.php';
		
		$return = FALSE;
		
		//翻译数组的键名
		if (is_array($need_field) && !empty($need_field)) {
			$return = array();
			
			if (is_array(reset($need_field))) {		//二维数组 记录列表
				foreach ($need_field as $need_field_item){
					$return[] = translate_field($module, $need_field_item);
				}
			} else {								//一维数组 单条记录
				$relation = array_flip($translate_config[$module]);
				foreach ($need_field as $k => $v){
					if (in_array($k, $translate_config[$module])) {
						$return[$relation[$k]] = $v;
					} else {
						$return[$k] = $v;
					}
				}
			}
		
		//翻译字段名
		} elseif (is_string($need_field)) {
			$return = !empty($translate_config[$module]) ? $translate_config[$module][$need_field] : FALSE;
		}
		
		return $return;
	}
}

if (!function_exists('match_at')) {
	/**
	 * 匹配文本中的@
	 * @author	Baiyu	2017-02-15
	 * @param	string	$input
	 * @return	array
	 */
	function match_at($input) {
		//preg_match_all('/\@(.+?)[\s:\/]/', $input, $matches);
		preg_match_all('/\@([^\s|\/|:]+)/', $input, $matches);
		if (isset($matches[1])) {
			return $matches[1];
		} else {
			return array();
		}
	}
}

if (!function_exists('match_badword')) {
	/**
	 * 匹配敏感词
	 * @author	Baiyu	2017-02-15
	 * @param	string	$input
	 * @return	array
	 */
	function match_badword($input) {
		//TODO
	}
}

if (!function_exists('array_unique_fb')) {
	/**
	 * 将二维数组中的重复元素过滤返回新的数组
	 * @author	haofei
	 * @param	array	$array	需要过滤的数组
	 * @return	array	$temp	返回过滤之后的数组
	 */
	function array_unique_fb($array){
		foreach($array as $k => $v){
			$keyvalue = array_keys($v);
			$key = array_keys ($v);
			$v = implode ('#', $v); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
			$temp[] = $v;
		}
		$temp = array_unique($temp); //去掉重复的字符串,也就是重复的一维数组
		foreach($temp as $k => $v){
			$temp[$k] = explode('#', $v); //再将拆开的数组重新组装
		}
		foreach ($temp as $key => $value) {
			$newArray[] = array_combine($keyvalue,$value);
		}
		return $newArray;
	}
}

/**
 * [array_unset_redo 剔除二维数组中相同的元素]
 * @author	haofei  2017-01-18
 * @param  [type] $array [需要改变的二维数组]
 * @param  [type] $k     [键值]
 * @return [type]        [生成新的二维数组]
 */
function array_unset_redo($array,$k){
	foreach($array as $key=>$val){
		if(!in_array($array[$key][$k],$abr)){
			$abr[] = $array[$key][$k];
		}else{
			unset($array[$key]);
		}
	}
	return $array;
}